package main

import "fmt"

/*
* 函数：
* func 函数名(参数)(返回值){
* ...
* }

*  多个参数是同类型的时候可以简写：
*  func test(x,y int, z string)  {

* 不定长参数
* func test(args ...int) {

* 返回值：
*  返回值语法除了常规的return之外 ， 还可以通过赋值的方式：
*  func test(args ...int) (a int) {
* 	a = args[0]
* 	return
* }

* 抽象函数（自己起的名）：
* 定义了函数入参和相应，任何相同入参相应的方法都可以赋值给抽象函数
* type calc func(args ...int) int
* func sum(args ...int) (a int) {
* ...
* }
* func sum(args ...int) (a int) {
* ...
* }
*

* 匿名函数 我认为一般是当作参数使用
 */

func main() {
	var c calc
	c = sum
	fmt.Println(c(1, 2))

	c = mult
	fmt.Println(c(1, 2))
}

type calc func(args ...int) int

func sum(args ...int) (a int) {
	for _, v := range args {
		a += v
	}
	return
}

func mult(args ...int) (a int) {
	a = 1
	for _, v := range args {
		a *= v
	}
	return
}
